We were using the wrong “maximal” model! This is a quick notebook to check what we see when we use the right maximal model to determine how many factors to extract.

US Adults, 2 characters

Maximal structure, oblimin rotation

Loading required namespace: GPArotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests that the number of factors =  4  and the number of components =  3 

convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.convergence not obtained in GPFoblq. 1000 iterations used.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.

Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, 
    n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.68  with  1  factors
VSS complexity 2 achieves a maximimum of 0.85  with  2  factors

The Velicer MAP achieves a minimum of 0.01  with  4  factors 
BIC achieves a minimum of  -2293.44  with  3  factors
Sample Size adjusted BIC achieves a minimum of  -398.01  with  7  factors

Statistics by number of factors 
   vss1 vss2   map dof  chisq     prob sqresid  fit RMSEA   BIC  SABIC complex  eChisq
1  0.68 0.00 0.046 740 3037.5 7.1e-275      61 0.68 0.131  -883 1461.1     1.0 7749.23
2  0.66 0.85 0.025 701 1871.1 2.9e-107      28 0.85 0.098 -1843  377.8     1.4 2416.67
3  0.57 0.79 0.012 663 1219.3  2.1e-35      31 0.84 0.071 -2293 -193.0     1.5  744.73
4  0.52 0.71 0.012 626 1062.1  4.7e-25      38 0.80 0.065 -2255 -271.4     1.6  507.14
5  0.40 0.62 0.012 590  910.0  4.5e-16      47 0.75 0.059 -2216 -346.9     1.8  409.97
6  0.44 0.61 0.013 555  808.6  9.9e-12      48 0.75 0.055 -2132 -373.7     1.8  311.67
7  0.43 0.61 0.013 521  711.8  4.8e-08      56 0.71 0.051 -2049 -398.0     1.7  255.44
8  0.43 0.61 0.014 488  654.3  6.6e-07      57 0.70 0.049 -1931 -385.2     1.8  218.28
9  0.38 0.54 0.016 456  606.5  2.8e-06      63 0.67 0.049 -1810 -364.9     1.9  191.00
10 0.35 0.51 0.017 425  560.0  1.1e-05      66 0.65 0.049 -1692 -345.3     2.1  161.68
11 0.38 0.50 0.017 395  519.8  2.4e-05      67 0.65 0.049 -1573 -321.7     2.1  136.92
12 0.29 0.43 0.019 366  466.8  2.8e-04      73 0.62 0.047 -1472 -312.8     2.5  112.84
13 0.26 0.36 0.020 338  424.0  1.0e-03      78 0.59 0.046 -1367 -296.0     2.6   95.28
14 0.27 0.39 0.022 311  384.7  2.7e-03      79 0.59 0.045 -1263 -277.8     2.6   79.78
15 0.25 0.36 0.024 285  354.3  3.2e-03      83 0.56 0.046 -1156 -252.8     2.6   68.91
16 0.23 0.34 0.026 260  317.8  8.3e-03      86 0.55 0.045 -1060 -236.1     2.9   56.50
17 0.22 0.31 0.029 236  269.9  6.4e-02      87 0.54 0.040  -980 -232.8     3.2   47.38
18 0.21 0.30 0.031 213  235.9  1.3e-01      89 0.53 0.037  -893 -217.8     3.2   38.70
19 0.19 0.28 0.034 191  193.7  4.3e-01      93 0.51 0.029  -818 -213.2     3.2   30.13
20 0.18 0.25 0.037 170  162.4  6.5e-01      96 0.49 0.023  -738 -199.7     3.1   23.98
21 0.18 0.26 0.041 150  145.6  5.9e-01      97 0.49 0.026  -649 -173.9     3.2   19.36
22 0.17 0.24 0.045 131  128.5  5.4e-01      98 0.48 0.027  -566 -150.5     3.5   15.35
23 0.16 0.23 0.050 113  112.2  5.0e-01     102 0.46 0.029  -486 -128.5     3.3   12.11
24 0.17 0.23 0.054  96   90.9  6.3e-01     104 0.45 0.024  -418 -113.6     3.2    9.46
25 0.17 0.23 0.061  80   75.0  6.4e-01     106 0.44 0.023  -349  -95.4     3.2    7.00
26 0.16 0.22 0.067  65   48.9  9.3e-01     108 0.43 0.000  -296  -89.6     3.3    4.97
27 0.16 0.22 0.075  51   33.9  9.7e-01     110 0.42 0.000  -236  -74.7     3.3    3.35
28 0.15 0.20 0.083  38   24.1  9.6e-01     112 0.41 0.000  -177  -56.9     3.3    2.11
29 0.16 0.21 0.097  26   15.8  9.4e-01     115 0.39 0.000  -122  -39.6     2.9    1.26
30 0.16 0.20 0.111  15    9.8  8.3e-01     117 0.39 0.000   -70  -22.1     2.8    0.72
31 0.16 0.20 0.128   5    3.5  6.3e-01     120 0.37 0.000   -23   -7.2     3.2    0.26
     SRMR eCRMS  eBIC
1  0.1576 0.162  3828
2  0.0880 0.093 -1297
3  0.0489 0.053 -2768
4  0.0403 0.045 -2810
5  0.0362 0.042 -2716
6  0.0316 0.037 -2629
7  0.0286 0.035 -2505
8  0.0265 0.033 -2367
9  0.0247 0.032 -2225
10 0.0228 0.031 -2090
11 0.0209 0.029 -1956
12 0.0190 0.028 -1826
13 0.0175 0.027 -1696
14 0.0160 0.025 -1568
15 0.0149 0.025 -1441
16 0.0135 0.023 -1321
17 0.0123 0.022 -1203
18 0.0111 0.021 -1090
19 0.0098 0.020  -982
20 0.0088 0.019  -877
21 0.0079 0.018  -775
22 0.0070 0.017  -679
23 0.0062 0.016  -587
24 0.0055 0.016  -499
25 0.0047 0.015  -417
26 0.0040 0.014  -339
27 0.0033 0.013  -267
28 0.0026 0.012  -199
29 0.0020 0.011  -136
30 0.0015 0.011   -79
31 0.0009 0.011   -26

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"

7-9yo US Children, 2 characters

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests that the number of factors =  3  and the number of components =  3 

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
 A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
 A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
 A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
 A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully. A loading greater than abs(1) was detected.  Examine the loadings carefully.convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.

Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, 
    n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.63  with  2  factors
VSS complexity 2 achieves a maximimum of 0.76  with  2  factors

The Velicer MAP achieves a minimum of 0.01  with  3  factors 
BIC achieves a minimum of  -2636.75  with  3  factors
Sample Size adjusted BIC achieves a minimum of  -549.78  with  5  factors

Statistics by number of factors 
   vss1 vss2    map dof  chisq    prob sqresid  fit RMSEA   BIC SABIC complex  eChisq
1  0.61 0.00 0.0207 740 1845.8 7.7e-96      48 0.61 0.091 -2093   251     1.0 4474.74
2  0.63 0.76 0.0121 701 1170.5 3.8e-26      29 0.76 0.063 -2561  -340     1.3 1567.74
3  0.54 0.72 0.0090 663  892.4 5.7e-09      28 0.77 0.048 -2637  -536     1.6  819.41
4  0.46 0.65 0.0096 626  803.4 1.9e-06      33 0.74 0.044 -2529  -545     1.8  690.41
5  0.46 0.61 0.0099 590  721.5 1.6e-04      32 0.74 0.041 -2419  -550     2.1  566.04
6  0.41 0.56 0.0107 555  652.2 2.7e-03      36 0.71 0.038 -2302  -544     2.0  481.91
7  0.36 0.51 0.0113 521  586.3 2.5e-02      38 0.69 0.034 -2187  -536     2.3  402.07
8  0.37 0.51 0.0121 488  526.6 1.1e-01      37 0.70 0.031 -2071  -525     2.5  336.72
9  0.32 0.47 0.0133 456  476.0 2.5e-01      39 0.68 0.028 -1951  -506     2.7  288.45
10 0.34 0.48 0.0145 425  438.0 3.2e-01      39 0.68 0.027 -1824  -478     2.6  248.24
11 0.35 0.47 0.0156 395  394.7 4.9e-01      40 0.68 0.024 -1708  -456     2.6  206.88
12 0.34 0.44 0.0168 366  352.3 6.9e-01      40 0.67 0.020 -1596  -436     2.7  174.58
13 0.33 0.41 0.0183 338  316.3 8.0e-01      42 0.66 0.016 -1483  -412     3.0  146.78
14 0.26 0.36 0.0202 311  282.7 8.7e-01      46 0.63 0.012 -1373  -387     3.4  126.67
15 0.28 0.38 0.0221 285  249.9 9.3e-01      45 0.64 0.000 -1267  -364     3.4  107.47
16 0.25 0.34 0.0239 260  217.0 9.8e-01      48 0.61 0.000 -1167  -343     3.5   87.43
17 0.21 0.29 0.0262 236  190.8 9.9e-01      51 0.58 0.000 -1065  -318     3.9   72.52
18 0.21 0.28 0.0284 213  162.0 1.0e+00      53 0.57 0.000  -972  -297     3.8   58.24
19 0.22 0.30 0.0305 191  144.3 1.0e+00      52 0.58 0.000  -872  -267     3.7   48.39
20 0.23 0.30 0.0331 170  119.3 1.0e+00      54 0.56 0.000  -786  -247     3.4   38.38
21 0.26 0.33 0.0367 150  101.5 1.0e+00      54 0.56 0.000  -697  -222     3.2   30.20
22 0.23 0.29 0.0403 131   87.0 1.0e+00      56 0.54 0.000  -610  -195     3.6   23.54
23 0.23 0.29 0.0441 113   72.5 1.0e+00      57 0.54 0.000  -529  -171     3.5   18.85
24 0.22 0.27 0.0480  96   61.4 1.0e+00      59 0.52 0.000  -450  -145     3.6   15.41
25 0.21 0.26 0.0529  80   52.2 9.9e-01      58 0.53 0.000  -374  -120     3.5   11.81
26 0.21 0.26 0.0578  65   42.5 9.9e-01      59 0.52 0.000  -304   -98     3.3    9.30
27 0.23 0.28 0.0630  51   30.8 9.9e-01      61 0.51 0.000  -241   -79     3.1    6.37
28 0.23 0.28 0.0702  38   19.7 9.9e-01      63 0.49 0.000  -183   -62     3.4    4.04
29 0.22 0.27 0.0791  26   14.1 9.7e-01      63 0.49 0.000  -124   -42     3.4    2.73
30 0.23 0.26 0.0908  15    7.1 9.5e-01      66 0.46 0.000   -73   -25     3.3    1.36
31 0.24 0.29 0.1044   5    2.8 7.3e-01      66 0.46 0.000   -24    -8     2.9    0.59
     SRMR eCRMS  eBIC
1  0.1183 0.121   536
2  0.0700 0.074 -2164
3  0.0506 0.055 -2710
4  0.0465 0.052 -2642
5  0.0421 0.048 -2575
6  0.0388 0.046 -2472
7  0.0355 0.043 -2371
8  0.0324 0.041 -2261
9  0.0300 0.039 -2139
10 0.0279 0.038 -2014
11 0.0254 0.036 -1896
12 0.0234 0.034 -1774
13 0.0214 0.033 -1652
14 0.0199 0.032 -1529
15 0.0183 0.030 -1410
16 0.0165 0.029 -1297
17 0.0151 0.027 -1184
18 0.0135 0.026 -1076
19 0.0123 0.025  -968
20 0.0110 0.023  -867
21 0.0097 0.022  -768
22 0.0086 0.021  -674
23 0.0077 0.020  -583
24 0.0069 0.020  -496
25 0.0061 0.019  -414
26 0.0054 0.019  -337
27 0.0045 0.017  -265
28 0.0036 0.016  -198
29 0.0029 0.016  -136
30 0.0021 0.015   -78
31 0.0014 0.017   -26

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"

7-9yo US Children, 9 characters

Maximal structure, oblimin rotation

convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests that the number of factors =  3  and the number of components =  3 


Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, 
    n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.82  with  1  factors
VSS complexity 2 achieves a maximimum of 0.9  with  2  factors

The Velicer MAP achieves a minimum of 0.02  with  3  factors 
BIC achieves a minimum of  -447.53  with  3  factors
Sample Size adjusted BIC achieves a minimum of  -41.12  with  7  factors

Statistics by number of factors 
  vss1 vss2   map dof chisq    prob sqresid  fit RMSEA  BIC SABIC complex eChisq  SRMR
1 0.82 0.00 0.041 170   542 1.8e-40    14.1 0.82 0.141 -276   262     1.0    690 0.121
2 0.77 0.90 0.032 151   374 6.8e-21     8.1 0.90 0.117 -353   125     1.2    279 0.077
3 0.56 0.88 0.022 133   192 5.7e-04     5.2 0.93 0.068 -448   -27     1.5     82 0.042
4 0.57 0.88 0.027 116   156 7.9e-03     4.7 0.94 0.062 -402   -35     1.6     65 0.037
5 0.56 0.87 0.032 100   125 4.5e-02     4.0 0.95 0.055 -356   -40     1.7     46 0.031
6 0.49 0.76 0.036  85   102 1.0e-01     3.5 0.96 0.052 -307   -38     2.0     32 0.026
7 0.49 0.74 0.042  71    76 3.2e-01     3.0 0.96 0.039 -266   -41     2.1     21 0.021
8 0.48 0.77 0.048  58    55 5.8e-01     2.5 0.97 0.023 -224   -40     2.1     12 0.016
  eCRMS eBIC
1 0.128 -128
2 0.087 -448
3 0.050 -558
4 0.048 -494
5 0.043 -435
6 0.039 -377
7 0.035 -321
8 0.029 -267

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"

4-6yo US Children

Maximal structure, oblimin rotation

 A loading greater than abs(1) was detected.  Examine the loadings carefully.Joining, by = "factor"

Reduced structure, oblimin rotation

Joining, by = "factor"

Alternative factor retention methods

Parallel analysis suggests that the number of factors =  2  and the number of components =  1 

Joining, by = "factor"

An ultra-Heywood case was detected.  Examine the results carefully

Very Simple Structure
Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, 
    n.obs = n.obs, plot = plot, title = title, use = use, cor = cor)
VSS complexity 1 achieves a maximimum of 0.84  with  1  factors
VSS complexity 2 achieves a maximimum of 0.87  with  2  factors

The Velicer MAP achieves a minimum of 0.02  with  1  factors 
BIC achieves a minimum of  -521.5  with  1  factors
Sample Size adjusted BIC achieves a minimum of  -46.41  with  4  factors

Statistics by number of factors 
  vss1 vss2   map dof chisq    prob sqresid  fit RMSEA  BIC SABIC complex eChisq  SRMR
1 0.84 0.00 0.018 170   298 4.7e-09    11.0 0.84 0.084 -521  16.0     1.0    276 0.076
2 0.62 0.87 0.019 151   242 3.5e-06     8.9 0.87 0.077 -486  -8.1     1.4    180 0.062
3 0.43 0.78 0.022 133   192 5.9e-04     7.8 0.88 0.068 -449 -28.2     1.9    132 0.053
4 0.34 0.67 0.023 116   146 3.1e-02     6.6 0.90 0.055 -413 -46.4     2.2     87 0.043
5 0.33 0.61 0.028 100   128 3.1e-02     5.9 0.91 0.057 -354 -37.8     2.4     70 0.039
6 0.32 0.60 0.033  85   104 8.1e-02     5.2 0.92 0.053 -306 -37.1     2.5     53 0.033
7 0.28 0.53 0.039  71    78 2.7e-01     4.5 0.93 0.042 -264 -39.8     2.6     34 0.027
8 0.31 0.55 0.046  58    57 5.3e-01     4.0 0.94 0.027 -223 -39.6     2.5     23 0.022
  eCRMS eBIC
1 0.081 -544
2 0.069 -547
3 0.063 -509
4 0.055 -472
5 0.053 -412
6 0.050 -357
7 0.044 -308
8 0.040 -256

Joining, by = "factor"

Clustering within reduced factor space

Joining, by = "capacity"
Joining, by = "capacity"

Changes in mental capacity attributions

Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vectorJoining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vectorJoining, by = c("subid", "MR1", "MR3", "MR2", "age_group", "character", "age")
Column `character` joining factors with different levels, coercing to character vector

LS0tCnRpdGxlOiAiUXVpY2sgZGlta2lkIGNoZWNrIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKLS0tCgpXZSB3ZXJlIHVzaW5nIHRoZSB3cm9uZyAibWF4aW1hbCIgbW9kZWwhIFRoaXMgaXMgYSBxdWljayBub3RlYm9vayB0byBjaGVjayB3aGF0IHdlIHNlZSB3aGVuIHdlIHVzZSB0aGUgcmlnaHQgbWF4aW1hbCBtb2RlbCB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmFjdG9ycyB0byBleHRyYWN0LgoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobz1GLCB3YXJuaW5nPUYsIGNhY2hlPUYsIG1lc3NhZ2U9RikKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGluY2x1ZGUgPSBGfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KGRlbmRleHRlbmQpCmBgYAoKYGBge3IgZnVuY3Rpb25zLCBpbmNsdWRlID0gRn0KIyBtYWtlIGZ1bmN0aW9uIHRvIGNsZWFuIHVwIGtpZCBkYXRhIGZyb20gVVMKY2xlYW5fa2lkX3VzX2Z1biA8LSBmdW5jdGlvbihkZiwgbl90cmlhbHMsIGFnZV9sb3dlciwgYWdlX3VwcGVyKSB7CiAgCiAgaWYoISgiYWdlIiAlaW4lIG5hbWVzKGRmKSkpIHsKICAgIGRmIDwtIGRmICU+JQogICAgICBtdXRhdGUoYWdlID0gTkEpCiAgfQogIAogIGRmX2NsZWFuIDwtIGRmICU+JQogICAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLAogICAgICAgICAgIGFnZSA9IGlmZWxzZShpcy5uYShhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgYWdlKSkgJT4lCiAgICBmaWx0ZXIodHJpYWxOdW0gPD0gbl90cmlhbHMpICU+JQogICAgZmlsdGVyKChhZ2UgPj0gYWdlX2xvd2VyICYgYWdlIDwgYWdlX3VwcGVyICsgMSkgfCAjIG91dHNpZGUgb2YgYWdlIHJhbmdlCiAgICAgICAgICAgICBpcy5uYShhZ2UpLCAjIG1pc3NpbmcgYWdlCiAgICAgICAgICAgKHJ0ID49IDI1MCB8IGlzLm5hKHJ0KSksICMgZmFzdCBSVHMKICAgICAgICAgICByZXNwb25zZSAlaW4lIGMoIm5vIiwgImtpbmRhIiwgInllcyIpLCAjIHNraXBwZWQgdHJpYWxzCiAgICAgICAgICAgIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNhcGFjaXR5KSkgJT4lCiAgICBtdXRhdGUocmVzcG9uc2VOdW0gPSByZWNvZGUocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpbmRhIiA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9IDEpLAogICAgICAgICAgIHJlc3BvbnNlTnVtID0gYXMubnVtZXJpYyhyZXNwb25zZU51bSkpICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICBtdXRhdGUoY2FwYWNpdHkgPSByZWNvZGUoY2FwYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnNjaW91cyIgPSAiYXdhcmVuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW1iYXJyYXNzZWQiID0gImVtYmFycmFzc21lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndWlsdCIgPSAiZ3VpbHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXBweSIgPSAiaGFwcGluZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG92ZSIgPSAibG92ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhaW4iID0gInBhaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmlkZSIgPSAicHJpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXByZXNzZWQiID0gInNhZG5lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWFyIiA9ICJmZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmF1c2VhdGVkIiA9ICJuYXVzZWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aXJlZCIgPSAiZmF0aWd1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYXNvbmluZyIgPSAiZmlndXJpbmdfb3V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5ncnkiID0gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHVuZ3J5IiA9ICJodW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNyZXNwZWN0ZWQiID0gImh1cnRfZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9pY2VzIiA9ICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1lbWJlcmluZyIgPSAibWVtb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVtcGVyYXR1cmUiID0gInRlbXBlcmF0dXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwdGgiID0gImRlcHRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2RvcnMiID0gInNtZWxsIikpICU+JQogICAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQogIAogIHJldHVybihkZl9jbGVhbikKICAKfQoKIyBtYWtlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBtYXggbl9mYWN0b3JzLCBnaXZlbiBuX29icyB2YXJpYWJsZXMKbWF4X2ZhY3RfZnVuIDwtIGZ1bmN0aW9uKHApIHsKICAKICBzX21vbWVudHMgPC0gZnVuY3Rpb24ocCkge3AqKHArMSkvMn0KICBwYXJhbV9lc3QgPC0gZnVuY3Rpb24ocCwgaykge3AqayArIHAgLSAoayooay0xKS8yKX0KICBjaGVja19vayA8LSBmdW5jdGlvbihwLCBrKSB7CiAgICBhIDwtIChwLWspXjIKICAgIGIgPC0gcCtrCiAgICByZXR1cm4oaWZlbHNlKGE+YiwgVFJVRSwgRkFMU0UpKQogIH0KICAKICBkZl9jaGVjayA8LSBkYXRhLmZyYW1lKCkKICBmb3IoaSBpbiAxOnApewogICAgZGZfY2hlY2tbaSwiY2hlY2siXSA8LSBjaGVja19vayhwLGkpCiAgfQogIAogIG1heCA8LSBkZl9jaGVjayAlPiUgZmlsdGVyKGNoZWNrKSAlPiUgbnJvdygpCiAgcmV0dXJuKG1heCkKICAKfQoKIyBtYWtlIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhCnJldGVuX2ZhY3RfZnVuIDwtIGZ1bmN0aW9uKGRmLCByb3QpIHsKICAKICBtYXhfZWZhIDwtIGZhKGRmLCBuZmFjdG9ycyA9IG1heF9mYWN0X2Z1bihuY29sKGRmKSksIHJvdGF0ZSA9ICJub25lIikKICBtYXhfdmFjYyA8LSBtYXhfZWZhJFZhY2NvdW50ZWQgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oInN0YXQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHZhbHVlLCAtc3RhdCkgJT4lCiAgICBzcHJlYWQoc3RhdCwgdmFsdWUpICU+JQogICAgZmlsdGVyKGBTUyBsb2FkaW5nc2AgPiAxLCBgUHJvcG9ydGlvbiBFeHBsYWluZWRgID4gMC4wNSkKICBuX3JldGVuMSA8LSBucm93KG1heF92YWNjKQogIAogIHJldGVuX2VmYSA8LSBmYShkZiwgbmZhY3RvcnMgPSBuX3JldGVuMSwgcm90YXRlID0gcm90KQogIHJldGVuX2xvYWRpbmdzIDwtIHJldGVuX2VmYSRsb2FkaW5nc1tdICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJtYyIpICU+JQogICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLW1jKSAlPiUKICAgIGdyb3VwX2J5KG1jKSAlPiUKICAgIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgICB1bmdyb3VwKCkKICBuX3JldGVuMiA8LSByZXRlbl9sb2FkaW5ncyAlPiUKICAgIGNvdW50KGZhY3RvcikgJT4lCiAgICBucm93KCkKICAgIAogIHJldHVybihuX3JldGVuMikKCn0KCiMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGhlYXRtYXAgb2YgZmFjdG9yIGxvYWRpbmdzCmhlYXRtYXBfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuX2ZhY3RvcnMsIHJvdCl7CiAgCiAgIyBkbyBlZmEKICBlZmEgPC0gZmEoZGYsIG5mYWN0b3JzID0gbl9mYWN0b3JzLCByb3RhdGUgPSByb3QpCiAgCiAgIyBnZXQgZmFjdG9yIGxvYWRpbmdzCiAgbG9hZGluZ3MgPC0gZWZhJGxvYWRpbmdzW10gJT4lCiAgICBmYS5zb3J0KCkgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm1jIikgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSkgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhtYywgb3JkZXIpKQogIAogICMgZ2V0IHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQKICB2YWNjIDwtIGVmYSRWYWNjb3VudGVkICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdGF0IikgJT4lCiAgICBmaWx0ZXIoc3RhdCA9PSAiUHJvcG9ydGlvbiBFeHBsYWluZWQiKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIHByb3BfdmFyLCAtc3RhdCkgJT4lCiAgICBzZWxlY3QoLXN0YXQpCiAgCiAgIyBwbG90IGl0IGFsbAogIHBsb3QgPC0gZ2dwbG90KGxvYWRpbmdzICU+JSAKICAgICAgICAgICAgICAgICAgIGZ1bGxfam9pbih2YWNjKSAlPiUKICAgICAgICAgICAgICAgICAgIG11dGF0ZShsYWIgPSBwYXN0ZTAoZmFjdG9yLCAiICgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoMTAwKnJvdW5kKHByb3BfdmFyLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUpIikpLAogICAgICAgICAgICAgICAgIGFlcyh4ID0gbGFiLCB5ID0gcmVvcmRlcihtYywgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZywgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKICAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICAgIGdlb21fdGV4dChzaXplID0gMykgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihsaW1pdHMgPSBjKC0xLCAxKSwgcGFsZXR0ZSA9ICJSZFlsQnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICAgIHRoZW1lX21pbmltYWwoKQogIAogIHJldHVybihwbG90KQogIAp9CmBgYAoKYGBge3IgZGF0YSwgaW5jbHVkZSA9IEYsIHdhcm5pbmcgPSBGQUxTRX0KIyBVUyBhZHVsdHMsIDIgY2hhcmFjdGVycwpkX3VzYWRfMmNoYXIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvYWR1bHRzL3VzX3J1bi0wMV8yMDE2LTA2LTA1X2Fub255bWl6ZWQuY3N2IikgJT4lIAogIG11dGF0ZShkYXRlT2ZCaXJ0aCA9IE5BLCBkYXRlT2ZUZXN0ID0gTkEpICU+JQogIGNsZWFuX2tpZF91c19mdW4obl90cmlhbHMgPSA0MCwgYWdlX2xvd2VyID0gMTgsIGFnZV91cHBlciA9IDEwMCkKCmRfdXNhZF8yY2hhcl9kZW1vIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDFfMjAxNi0wNi0wNV9hbm9ueW1pemVkLmNzdiIpICU+JQogIGRpc3RpbmN0KHN1YmlkLCBjaGFyTmFtZSkKCiMgVVMgYWR1bHRzLCA5IGNoYXJhY3RlciAoTkVFRCBUTyBSVU4pCgojIFVTIDctOXlvLCAyIGNoYXJhY3RlcnMKZF91czc5XzJjaGFyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMV8yMDE3LTA3LTI0X2Fub255bWl6ZWQuY3N2IikgJT4lIGNsZWFuX2tpZF91c19mdW4obl90cmlhbHMgPSA0MCwgYWdlX2xvd2VyID0gNywgYWdlX3VwcGVyID0gOSkKCmRfdXM3OV8yY2hhcl9kZW1vIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMV8yMDE3LTA3LTI0X2Fub255bWl6ZWQuY3N2IikgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSAlPiUKICBmaWx0ZXIoKGFnZSA+PSA3ICYgYWdlIDwgMTApIHwgaXMubmEoYWdlKSkKCiMgVVMgNy05eW8sIDkgY2hhcmFjdGVycwpkX3VzNzlfOWNoYXIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAyXzIwMTctMDgtMDhfYW5vbnltaXplZC5jc3YiKSAlPiUgY2xlYW5fa2lkX3VzX2Z1bihuX3RyaWFscyA9IDIwLCBhZ2VfbG93ZXIgPSA3LCBhZ2VfdXBwZXIgPSA5KQoKZF91czc5XzljaGFyX2RlbW8gPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAyXzIwMTctMDgtMDhfYW5vbnltaXplZC5jc3YiKSAlPiUKICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkYXRlT2ZCaXJ0aCwgZGF0ZU9mVGVzdCkgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwKICAgICAgICAgYWdlID0gaW50ZXJ2YWwoc3RhcnQgPSBkb2IsIGVuZCA9IGRvdCkgLwogICAgICAgICAgIGR1cmF0aW9uKG51bSA9IDEsIHVuaXRzID0gInllYXJzIikpICU+JQogIGZpbHRlcigoYWdlID49IDcgJiBhZ2UgPCAxMCkgfCBpcy5uYShhZ2UpKQoKIyBVUyA0LTZ5bywgOSBjaGFyYWN0ZXJzCmRfdXM0Nl85Y2hhciA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JSBjbGVhbl9raWRfdXNfZnVuKG5fdHJpYWxzID0gMjAsIGFnZV9sb3dlciA9IDQsIGFnZV91cHBlciA9IDYpCgpkX3VzNDZfOWNoYXJfZGVtbyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JQogIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIsIGRhdGVPZkJpcnRoLCBkYXRlT2ZUZXN0KSAlPiUKICBtdXRhdGUoZG9iID0gcGFyc2VfZGF0ZXRpbWUoZGF0ZU9mQmlydGgsICIlbS8lZC8leSIpLAogICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLAogICAgICAgICBhZ2UgPSBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvCiAgICAgICAgICAgZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgZmlsdGVyKChhZ2UgPj0gNCAmIGFnZSA8IDcpIHwgaXMubmEoYWdlKSkKYGBgCgojICBVUyBBZHVsdHMsIDIgY2hhcmFjdGVycwoKIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3VzYWRfMmNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXNhZF8yY2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogIFVTIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjV9CmhlYXRtYXBfZnVuKGRfdXNhZF8yY2hhciwgcmV0ZW5fZmFjdF9mdW4oZF91c2FkXzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiAgVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3J9CmZhLnBhcmFsbGVsKGRfdXNhZF8yY2hhcikKYGBgCgpgYGB7ciwgd2FybmluZ3MgPSBGfQpWU1MoZF91c2FkXzJjaGFyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF91c2FkXzJjaGFyKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gRn0KaGVhdG1hcF9mdW4oZF91c2FkXzJjaGFyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgcGFyYWxsZWwgYW5hbHlzaXM6ICBVUyBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KIyBwYXIobWFyID0gYygxLCAxLCAxLCA2KSkKY2x1c3QgPC0gZmEoZF91c2FkXzJjaGFyLCAKICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91c2FkXzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGRpc3QoKSAlPiUKICBoY2x1c3QoKQoKY2x1c3QgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgdmFsdWUgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksIAogICMgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgIyBzZXQoImxlYXZlc19wY2giLCAxNikgJT4lCiAgIyBwbG90KGhvcml6ID0gVCkKICBhcy5nZ2RlbmQoKSAlPiUKICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0wLjcsIG1heChjbHVzdCRoZWlnaHQpKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiAgVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIpCgpybShjbHVzdCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmRfY2x1c3QgPC0gZmEoZF91c2FkXzJjaGFyLAogICAgICAgICAgICAgIHJldGVuX2ZhY3RfZnVuKGRfdXNhZF8yY2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKQoKY2x1c3QgPC0ga21lYW5zKGRfY2x1c3QsIGNlbnRlcnMgPSA2KQojIGZhY3RvZXh0cmE6OmZ2aXpfY2x1c3RlcihjbHVzdCwgZF9jbHVzdCkgKwojICAgdGhlbWVfbWluaW1hbCgpCgpjbHVzdF9jYXQgPC0gY2x1c3QkY2x1c3RlciAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIHJlbmFtZSgiY2x1c3RlciIgPSAiLiIpICU+JQogIGZ1bGxfam9pbihkX2NsdXN0ICU+JSByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikpICU+JQogIGZ1bGxfam9pbihkX2NsdXN0ICU+JSAKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWMoY2FwYWNpdHkpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lIAogICAgICAgICAgICAgIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICAgICAgIHJlbmFtZShkb21fZmFjdG9yID0gZmFjdG9yKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLWxvYWRpbmcpKSAlPiUKICBtdXRhdGUoY2x1c3RlciA9IGZhY3RvcihjbHVzdGVyKSkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjEsIHkgPSBNUjIsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIlNldDIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBVUyBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEhFQVJUKSIsIHkgPSAiRUZBOiBNUjIgKEJPRFkpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiU2V0MiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFVTIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoSEVBUlQpIiwgeSA9ICJFRkE6IE1SMyAoTUlORCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIyLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVVMgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIyIChIRUFSVCkiLCB5ID0gIkVGQTogTVIzIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCnJtKGRfY2x1c3QsIGNsdXN0LCBjbHVzdF9jYXQpCmBgYAoKCiMgNy05eW8gVVMgQ2hpbGRyZW4sIDIgY2hhcmFjdGVycwoKIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXM3OV8yY2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS41fQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIHJldGVuX2ZhY3RfZnVuKGRfdXM3OV8yY2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7cn0KZmEucGFyYWxsZWwoZF91czc5XzJjaGFyKQpgYGAKCmBgYHtyLCB3YXJuaW5ncyA9IEZ9ClZTUyhkX3VzNzlfMmNoYXIsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3VzNzlfMmNoYXIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBGfQpoZWF0bWFwX2Z1bihkX3VzNzlfMmNoYXIsIDUsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBCSUMgcmV0ZW50aW9uOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQojIHBhcihtYXIgPSBjKDEsIDEsIDEsIDYpKQpjbHVzdCA8LSBmYShkX3VzNzlfMmNoYXIsIAogICAgICAgICAgICByZXRlbl9mYWN0X2Z1bihkX3VzNzlfMmNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgZGlzdCgpICU+JQogIGhjbHVzdCgpCgpjbHVzdCAlPiUKICBhcy5kZW5kcm9ncmFtKCkgJT4lCiAgIyBzZXQoImxhYmVsc19jb2wiLCB2YWx1ZSA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIsICIjZmZmZjk5IiwgIiNiMTU5MjgiKSwgCiAgIyAgICAgayA9IDYpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgdmFsdWUgPSBjKCIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2E2Y2VlMyIsICIjMWY3OGI0IiwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNiMmRmOGEiLCAiIzMzYTAyYyIpLCAKICAjICAgICBrID0gNikgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogICMgc2V0KCJsZWF2ZXNfcGNoIiwgMTYpICU+JQogICMgcGxvdChob3JpeiA9IFQpCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMC43LCBtYXgoY2x1c3QkaGVpZ2h0KSkpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIikKCnJtKGNsdXN0KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9jbHVzdCA8LSBmYShkX3VzNzlfMmNoYXIsCiAgICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czc5XzJjaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpCgpjbHVzdCA8LSBrbWVhbnMoZF9jbHVzdCwgY2VudGVycyA9IDYpCiMgZmFjdG9leHRyYTo6ZnZpel9jbHVzdGVyKGNsdXN0LCBkX2NsdXN0KSArCiMgICB0aGVtZV9taW5pbWFsKCkKCmNsdXN0X2NhdCA8LSBjbHVzdCRjbHVzdGVyICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKCJjbHVzdGVyIiA9ICIuIikgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSkgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIAogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhjYXBhY2l0eSkpICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUgCiAgICAgICAgICAgICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKGRvbV9mYWN0b3IgPSBmYWN0b3IpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtbG9hZGluZykpICU+JQogIG11dGF0ZShjbHVzdGVyID0gZmFjdG9yKGNsdXN0ZXIpKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMiwKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICIyIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoSEVBUlQpIiwgeSA9ICJFRkE6IE1SMiAoQk9EWSkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJEYXJrMiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjIgY2hhcmFjdGVycywgNDAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIxIChIRUFSVCkiLCB5ID0gIkVGQTogTVIzIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjIsIHkgPSBNUjMsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiMiBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjIgKEhFQVJUKSIsIHkgPSAiRUZBOiBNUjMgKE1JTkQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKcm0oZF9jbHVzdCwgY2x1c3QsIGNsdXN0X2NhdCkKYGBgCgoKIyA3LTl5byBVUyBDaGlsZHJlbiwgOSBjaGFyYWN0ZXJzCgojIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3VzNzlfOWNoYXIsIG1heF9mYWN0X2Z1bihuY29sKGRfdXM3OV85Y2hhcikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF91czc5XzljaGFyLCByZXRlbl9mYWN0X2Z1bihkX3VzNzlfOWNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCgojIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyfQpmYS5wYXJhbGxlbChkX3VzNzlfOWNoYXIpCmBgYAoKYGBge3J9ClZTUyhkX3VzNzlfOWNoYXIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gRn0KaGVhdG1hcF9mdW4oZF91czc5XzljaGFyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IDctOXlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CiMgcGFyKG1hciA9IGMoMSwgMSwgMSwgNikpCmNsdXN0IDwtIGZhKGRfdXM3OV85Y2hhciwgCiAgICAgICAgICAgIHJldGVuX2ZhY3RfZnVuKGRfdXM3OV85Y2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkKCmNsdXN0ICU+JQogIGFzLmRlbmRyb2dyYW0oKSAlPiUKICAjIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLCAKICAjICAgICBrID0gNCkgJT4lCiAgc2V0KCJicmFuY2hlc19sd2QiLCAwLjUpICU+JQogICMgc2V0KCJsZWF2ZXNfcGNoIiwgMTYpICU+JQogICMgcGxvdChob3JpeiA9IFQpCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIsIGx0eSA9IDIsIGNvbG9yID0gImJsYWNrIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtMC43LCBtYXgoY2x1c3QkaGVpZ2h0KSkpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIikKCnJtKGNsdXN0KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9jbHVzdCA8LSBmYShkX3VzNzlfOWNoYXIsCiAgICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czc5XzljaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpCgpjbHVzdCA8LSBrbWVhbnMoZF9jbHVzdCwgY2VudGVycyA9IDYpCiMgZmFjdG9leHRyYTo6ZnZpel9jbHVzdGVyKGNsdXN0LCBkX2NsdXN0KSArCiMgICB0aGVtZV9taW5pbWFsKCkKCmNsdXN0X2NhdCA8LSBjbHVzdCRjbHVzdGVyICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKCJjbHVzdGVyIiA9ICIuIikgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSkgJT4lCiAgZnVsbF9qb2luKGRfY2x1c3QgJT4lIAogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtYyhjYXBhY2l0eSkpICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUgCiAgICAgICAgICAgICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKGRvbV9mYWN0b3IgPSBmYWN0b3IpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtbG9hZGluZykpICU+JQogIG11dGF0ZShjbHVzdGVyID0gZmFjdG9yKGNsdXN0ZXIpKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMSwgeSA9IE1SMiwKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMSAoQk9EWSkiLCB5ID0gIkVGQTogTVIyIChNSU5EKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCmdncGxvdChjbHVzdF9jYXQsIAogICAgICAgYWVzKHggPSBNUjEsIHkgPSBNUjMsCiAgICAgICAgICAgY29sb3IgPSBjbHVzdGVyLAogICAgICAgICAgICMgY29sb3IgPSBkb21fZmFjdG9yLCBzaGFwZSA9IGNsdXN0ZXIsCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArIAogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaG93LmxlZ2VuZCA9IEYpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiNlNDFhMWMiLCAiIzRkYWY0YSIpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKGd1aWRlID0gIm5vbmUiLCBwYWxldHRlID0gIkRhcmsyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNy05eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMyAoSEVBUlQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMiwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJLLW1lYW5zIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA3LTl5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICJFRkE6IE1SMiAoTUlORCkiLCB5ID0gIkVGQTogTVIzIChIRUFSVCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpybShkX2NsdXN0LCBjbHVzdCwgY2x1c3RfY2F0KQpgYGAKCiMgNC02eW8gVVMgQ2hpbGRyZW4KCiMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgbWF4X2ZhY3RfZnVuKG5jb2woZF91czQ2XzljaGFyKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3VzNDZfOWNoYXIsIHJldGVuX2ZhY3RfZnVuKGRfdXM0Nl85Y2hhciwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKCiMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3J9CmZhLnBhcmFsbGVsKGRfdXM0Nl85Y2hhcikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgMiwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIHBhcmFsbGVsIGFuYWx5c2lzOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7cn0KVlNTKGRfdXM0Nl85Y2hhcikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXM0Nl85Y2hhciwgMSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBGfQpoZWF0bWFwX2Z1bihkX3VzNDZfOWNoYXIsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KIyBwYXIobWFyID0gYygxLCAxLCAxLCA2KSkKY2x1c3QgPC0gZmEoZF91czQ2XzljaGFyLCAKICAgICAgICAgICAgcmV0ZW5fZmFjdF9mdW4oZF91czQ2XzljaGFyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGRpc3QoKSAlPiUKICBoY2x1c3QoKQoKY2x1c3QgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogICMgc2V0KCJsYWJlbHNfY29sIiwgCiAgIyAgICAgIyB2YWx1ZSA9IGNvbG9yUmFtcFBhbGV0dGUoc29sYXJpemVkX3BhbCgpKDgpKSgyMCksCiAgIyAgICAgdmFsdWUgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAjICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICMgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICMgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgIyBzZXQoImxlYXZlc19wY2giLCAxNikgJT4lCiAgIyBwbG90KGhvcml6ID0gVCkKICBhcy5nZ2RlbmQoKSAlPiUKICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0wLjcsIG1heChjbHVzdCRoZWlnaHQpKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiA0LTZ5byBVUyBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMsIG9ibGltaW4gcm90YXRpb24iKQoKcm0oY2x1c3QpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpkX2NsdXN0IDwtIGZhKGRfdXM0Nl85Y2hhciwKICAgICAgICAgICAgICByZXRlbl9mYWN0X2Z1bihkX3VzNDZfOWNoYXIsICJvYmxpbWluIiksICJvYmxpbWluIikkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkKCmNsdXN0IDwtIGttZWFucyhkX2NsdXN0LCBjZW50ZXJzID0gNikKIyBmYWN0b2V4dHJhOjpmdml6X2NsdXN0ZXIoY2x1c3QsIGRfY2x1c3QpICsKIyAgIHRoZW1lX21pbmltYWwoKQoKY2x1c3RfY2F0IDwtIGNsdXN0JGNsdXN0ZXIgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoImNsdXN0ZXIiID0gIi4iKSAlPiUKICBmdWxsX2pvaW4oZF9jbHVzdCAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpKSAlPiUKICBmdWxsX2pvaW4oZF9jbHVzdCAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogICAgICAgICAgICAgIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jKGNhcGFjaXR5KSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JSAKICAgICAgICAgICAgICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JQogICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICByZW5hbWUoZG9tX2ZhY3RvciA9IGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KC1sb2FkaW5nKSkgJT4lCiAgbXV0YXRlKGNsdXN0ZXIgPSBmYWN0b3IoY2x1c3RlcikpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIyLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMiAoTUlORCkiLAogICAgICAgY29sb3IgPSAiRmFjdG9yIiwgc2hhcGUgPSAiQ2x1c3RlciIpICsKICB0aGVtZSgpCgpnZ3Bsb3QoY2x1c3RfY2F0LCAKICAgICAgIGFlcyh4ID0gTVIxLCB5ID0gTVIzLAogICAgICAgICAgIGNvbG9yID0gY2x1c3RlciwKICAgICAgICAgICAjIGNvbG9yID0gZG9tX2ZhY3Rvciwgc2hhcGUgPSBjbHVzdGVyLAogICAgICAgICAgIGxhYmVsID0gY2FwYWNpdHkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIiwgIiM0ZGFmNGEiKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihndWlkZSA9ICJub25lIiwgcGFsZXR0ZSA9ICJTZXQyIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnModGl0bGUgPSAiSy1tZWFucyBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogNC02eW8gVVMgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiOSBjaGFyYWN0ZXJzLCAyMCBjYXBhY2l0aWVzLCBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiRUZBOiBNUjEgKEJPRFkpIiwgeSA9ICJFRkE6IE1SMyAoSEVBUlQpIiwKICAgICAgIGNvbG9yID0gIkZhY3RvciIsIHNoYXBlID0gIkNsdXN0ZXIiKSArCiAgdGhlbWUoKQoKZ2dwbG90KGNsdXN0X2NhdCwgCiAgICAgICBhZXMoeCA9IE1SMiwgeSA9IE1SMywKICAgICAgICAgICBjb2xvciA9IGNsdXN0ZXIsCiAgICAgICAgICAgIyBjb2xvciA9IGRvbV9mYWN0b3IsIHNoYXBlID0gY2x1c3RlciwKICAgICAgICAgICBsYWJlbCA9IGNhcGFjaXR5KSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsgCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNob3cubGVnZW5kID0gRikgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiI2U0MWExYyIsICIjNGRhZjRhIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoZ3VpZGUgPSAibm9uZSIsIHBhbGV0dGUgPSAiU2V0MiIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkstbWVhbnMgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IDQtNnlvIFVTIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcywgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIkVGQTogTVIyIChNSU5EKSIsIHkgPSAiRUZBOiBNUjMgKEhFQVJUKSIsCiAgICAgICBjb2xvciA9ICJGYWN0b3IiLCBzaGFwZSA9ICJDbHVzdGVyIikgKwogIHRoZW1lKCkKCnJtKGRfY2x1c3QsIGNsdXN0LCBjbHVzdF9jYXQpCmBgYAoKIyBDaGFuZ2VzIGluIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC40fQplZmFfb2xkIDwtIGZhKGRfdXM3OV85Y2hhciwgbmZhY3RvcnMgPSAzLCByb3RhdGUgPSAib2JsaW1pbiIpCmVmYV9vbGQkbG9hZGluZ3NbXSAlPiUgCiAgZmEuc29ydCgpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUgCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JSAKICB0b3Bfbig0LCBhYnMobG9hZGluZykpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGFicyhsb2FkaW5nKSkpICU+JQogIHVuZ3JvdXAoKQoKcHJvamVjdGVkX3lvdW5nIDwtIHByZWRpY3QucHN5Y2goZWZhX29sZCwgZF91czQ2XzljaGFyLCBkX3VzNzlfOWNoYXIpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKGFnZV9ncm91cCA9ICI0LTZ5IikgJT4lCiAgZnVsbF9qb2luKGRfdXM0Nl85Y2hhcl9kZW1vICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBhZ2UpKQoKc2NvcmVzX29sZCA8LSBlZmFfb2xkJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiNy05eSIpICU+JQogIGZ1bGxfam9pbihkX3VzNzlfOWNoYXJfZGVtbyAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSkKCnNjb3Jlc19hbGwgPC0gcHJvamVjdGVkX3lvdW5nICU+JQogIGZ1bGxfam9pbihzY29yZXNfb2xkKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlciksICFjaGFyYWN0ZXIgJWluJSBjKCIiLCAiICIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoIk1SIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTVIxIiwgIk1SMyIsICJNUjIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSwKICAgICAgICAgY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5X2JlYXIiLCAiYmVldGxlIiwgImJpcmQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCgpzY29yZXNfYWxsICU+JSBkaXN0aW5jdChhZ2VfZ3JvdXAsIGNoYXJhY3Rlciwgc3ViaWQpICU+JSBjb3VudChjaGFyYWN0ZXIpICU+JSBzdW1tYXJpc2UobWluID0gbWluKG4pLCBtYXggPSBtYXgobikpCgpnZ3Bsb3Qoc2NvcmVzX2FsbCwKICAgICAgIGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsCiAgICAgICAgICAgZ3JvdXAgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQofiBmYWN0b3IpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA3LCBsdHkgPSAzKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIsIGRpcmVjdGlvbiA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIsIGRpcmVjdGlvbiA9IDEpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeCA9ICJBZ2UgKHkpIiwKICAgICAgIHkgPSAiRmFjdG9yIHNjb3JlIChpbiBvbGRlciBjaGlsZHJlbidzIDMtZmFjdG9yIHNwYWNlKSIsCiAgICAgICBjb2xvciA9ICJDaGFyYWN0ZXIiLCBmaWxsID0gIkNoYXJhY3RlciIpCmBgYAoK